package com.zjdiepu.www.manage.api.other;

import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;

import java.util.Arrays;
import java.util.List;

import javax.annotation.Resource;

import org.apache.commons.lang.StringUtils;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;

import com.zjdiepu.www.base.BaseController;
import com.zjdiepu.www.base.annotation.Add;
import com.zjdiepu.www.base.annotation.Update;
import com.zjdiepu.www.base.core.AbstractSysUser;
import com.zjdiepu.www.base.core.ApiResponse;
import com.zjdiepu.www.base.core.PageVo;
import com.zjdiepu.www.base.enums.status.DpStatus;
import com.zjdiepu.www.base.enums.type.DataDicType;
import com.zjdiepu.www.base.enums.type.OperateType;
import com.zjdiepu.www.base.enums.type.ResultFlagType;
import com.zjdiepu.www.common.util.CollectionInitUtil;
import com.zjdiepu.www.dao.base.SysUserMapper;
import com.zjdiepu.www.dao.system.BaseBusiUnitMapper;
import com.zjdiepu.www.ibiz.cache.ICachedDictionaryService;
import com.zjdiepu.www.ibiz.other.IOtherMessagePushExtraService;
import com.zjdiepu.www.model.base.dto.SysUser;
import com.zjdiepu.www.model.base.ext.SysUserExt;
import com.zjdiepu.www.model.other.dto.OtherMessagePushExtra;
import com.zjdiepu.www.model.other.ext.OtherMessagePushExtraExt;
import com.zjdiepu.www.model.system.dto.BaseBusiUnit;

/**
 * other_额外消息推送Controller层<br/>
 * @author zhangpp<br/>
 * @time 2018年01月18日 11时23分<br/>
 * @since 1.0<br/>
 */
@RestController
@RequestMapping(value= "OtherMessagePushExtraController", produces="application/json;charset=UTF-8")
@Api(tags = {"other_额外消息推送"}, produces="application/json;charset=UTF-8")
public class OtherMessagePushExtraController extends BaseController {
	
    @Resource
    private IOtherMessagePushExtraService otherMessagePushExtraService;
    
    @Resource
    private SysUserMapper sysUserMapper;
    
    @Resource
	private ICachedDictionaryService cachedDictionaryService;
	
    @Resource
	private BaseBusiUnitMapper baseBusiUnitMapper;

    /**
     * @author zhangpp <br/>
     * @Title: save  <br/>
     * @Description: 新增other_额外消息推送 <br/>
     * @param otherMessagePushExtra
     * @return
     * @version V1.0  <br/>
     */
    @ApiOperation(value = "新增other_额外消息推送", response = Boolean.class, httpMethod="POST", tags={"新增"})
    @RequestMapping(value = "save", method = RequestMethod.POST)
    public ApiResponse save(@Validated(Add.class) @ModelAttribute OtherMessagePushExtra otherMessagePushExtra) {
    	AbstractSysUser currentUser = getCurrentUser();
    	otherMessagePushExtra.setModifier(currentUser.getId()); //统一使用修改人和修改人名称来初始化
    	otherMessagePushExtra.setModifierName(currentUser.getName());
        otherMessagePushExtraService.saveUpdateAndDelete(otherMessagePushExtra, OperateType.add);
        return ApiResponse.success(true);
    }

    /**
     * @author zhangpp <br/>
     * @Title: remove  <br/>
     * @Description: 删除other_额外消息推送<br/>
     * @param id
     * @return
     * @version V1.0  <br/>
     */
    @ApiOperation(value = "删除other_额外消息推送", response = Boolean.class, httpMethod="POST", tags={"删除"})
    @ApiImplicitParams({
        @ApiImplicitParam(name = "id", value = "数据主键", paramType="query", required = true, example="1")
    })
    @RequestMapping(value = "remove", method = RequestMethod.POST)
    public ApiResponse remove(String id) {
    	if(StringUtils.isBlank(id)) {
    		return ApiResponse.fail(ResultFlagType.PARAM_EMPTY);
    	}
    	AbstractSysUser currentUser = getCurrentUser();
    	List<String> ids = Arrays.asList(id.split(","));
    	otherMessagePushExtraService.updateBatch(currentUser.getId(), currentUser.getName(), DpStatus.DELETED.getCode(), ids);
        return ApiResponse.success(true);
    }
    
    /**
     * @author zhangpp <br/>
     * @Title: disable  <br/>
     * @Description: 禁用other_额外消息推送<br/>
     * @param id
     * @return
     * @version V1.0  <br/>
     */
    @ApiOperation(value = "禁用other_额外消息推送", response = Boolean.class, httpMethod="POST", tags={"禁用"})
    @ApiImplicitParams({
        @ApiImplicitParam(name = "id", value = "数据主键", paramType="query", required = true, example="1")
    })
    @RequestMapping(value = "disable", method = RequestMethod.POST)
    public ApiResponse disable(String id) {
    	if(StringUtils.isBlank(id)) {
    		return ApiResponse.fail(ResultFlagType.PARAM_EMPTY);
    	}
    	AbstractSysUser currentUser = getCurrentUser();
    	List<String> ids = Arrays.asList(id.split(","));
    	otherMessagePushExtraService.updateBatch(currentUser.getId(), currentUser.getName(), DpStatus.INVALID.getCode(), ids);
        return ApiResponse.success(true);
    }
    
    /**
     * @author zhangpp <br/>
     * @Title: enable <br/>
     * @Description: 启用other_额外消息推送<br/>
     * @param id
     * @return
     * @version V1.0  <br/>
     */
    @ApiOperation(value = "启用other_额外消息推送", response = Boolean.class, httpMethod="POST", tags={"启用"})
    @ApiImplicitParams({
        @ApiImplicitParam(name = "id", value = "数据主键", paramType="query", required = true, example="1")
    })
    @RequestMapping(value = "enable", method = RequestMethod.POST)
    public ApiResponse enable(String id) {
    	if(StringUtils.isBlank(id)) {
    		return ApiResponse.fail(ResultFlagType.PARAM_EMPTY);
    	}
    	AbstractSysUser currentUser = getCurrentUser();
    	List<String> ids = Arrays.asList(id.split(","));
    	otherMessagePushExtraService.updateBatch(currentUser.getId(), currentUser.getName(), DpStatus.NORMAL.getCode(), ids);
        return ApiResponse.success(true);
    }

    /**
     * @author zhangpp <br/>
     * @Title: modify  <br/>
     * @Description: 修改other_额外消息推送 <br/>
     * @param otherMessagePushExtra
     * @return
     * @version V1.0  <br/>
     */
    @ApiOperation(value = "修改other_额外消息推送", response = Boolean.class, httpMethod="POST", tags={"修改"})
    @RequestMapping(value = "modify", method = RequestMethod.POST)
    public ApiResponse modify(@Validated(Update.class) @ModelAttribute OtherMessagePushExtra otherMessagePushExtra) {
    	AbstractSysUser currentUser = getCurrentUser();
    	otherMessagePushExtra.setModifier(currentUser.getId()); //统一使用修改人和修改人名称来初始化
    	otherMessagePushExtra.setModifierName(currentUser.getName());
    	otherMessagePushExtraService.saveUpdateAndDelete(otherMessagePushExtra, OperateType.edit);
        return ApiResponse.success(true);
    }

    /**
     * @author zhangpp <br/>
     * @Title: getById  <br/>
     * @Description: 主键查询other_额外消息推送<br/>
     * @param id
     * @return
     * @version V1.0  <br/>
     */
    @ApiOperation(value = "主键查询other_额外消息推送", response = OtherMessagePushExtra.class, httpMethod="POST", tags={"主键查询"})
    @ApiImplicitParams({
        @ApiImplicitParam(name = "id", value = "数据主键", paramType="query", required = true, example="1")
    })
    @RequestMapping(value = "getById", method = RequestMethod.POST)
    public ApiResponse getById(String id){
    	if(StringUtils.isBlank(id)) {
    		return ApiResponse.fail(ResultFlagType.PARAM_EMPTY);
    	}
       OtherMessagePushExtra otherMessagePushExtra = otherMessagePushExtraService.selectById(id);
       if(null == otherMessagePushExtra) {
    	   return ApiResponse.fail(ResultFlagType.MISSING);
       }
       return ApiResponse.success(otherMessagePushExtra);
    }
    
    /**
     * @author zhangpp <br/>
     * @Title: list  <br/>
     * @Description: 条件查询other_额外消息推送 <br/>
     * @param otherMessagePushExtraExt
     * @return
     * @version V1.0  <br/>
     */
    @ApiOperation(value = "条件查询other_额外消息推送",response = OtherMessagePushExtra.class, httpMethod="POST", tags={"列表"})
    @RequestMapping(value = "list", method = RequestMethod.POST)
    public ApiResponse list(@ModelAttribute OtherMessagePushExtraExt otherMessagePushExtraExt){
        otherMessagePushExtraExt.notDeleted();
        PageVo page = getPage(otherMessagePushExtraExt);
        int records = otherMessagePushExtraService.countByExt(otherMessagePushExtraExt);
        page.setRecords(records);
        if (records > 0) {
            List<OtherMessagePushExtra> otherMessagePushExtras = otherMessagePushExtraService.selectByExt(otherMessagePushExtraExt);
            SysUserExt sysUserExt = new SysUserExt();
            sysUserExt.withOutPage();
            List<SysUser> list = sysUserMapper.selectByExt(sysUserExt);
            
            for(int i=0;i<otherMessagePushExtras.size();i++)
            {
            	String userName = "";
            	if(StringUtils.isNotBlank(otherMessagePushExtras.get(i).getUserId()))
            	{
            		String[] userIdT = otherMessagePushExtras.get(i).getUserId().split(",");
            		if(null != userIdT && userIdT.length > 0)
            		{
            			for(int x=0;x<userIdT.length;x++)
            			{
            				for(int j=0;j<list.size();j++)
            				{
            					if(userIdT[x].equals(list.get(j).getId()))
            					{
            						userName += list.get(j).getLoginName() + ",";
            						break;
            					}
            				}
            			}
            		}
            	}
            	if(StringUtils.isNotBlank(userName))
            	{
            		userName = userName.substring(0,userName.length() - 1);
            	}
            	otherMessagePushExtras.get(i).setUserName(userName);
            	
            	BaseBusiUnit baseBusiUnit = baseBusiUnitMapper.selectByPrimaryKey(otherMessagePushExtras.get(i).getIdUnit());
            	if(null != baseBusiUnit)
            	{
            		otherMessagePushExtras.get(i).setIdUnitName(baseBusiUnit.getOrgName());
            	}
            	otherMessagePushExtras.get(i).setTypeMsgEventName(cachedDictionaryService.getName(otherMessagePushExtras.get(i).getTypeMsgEvent(), DataDicType.MESSAGE_EVENT_TYPE));
            }
            
            page.setRows(otherMessagePushExtras);
        } else {
            page.setRows(CollectionInitUtil.emptyList());
        }
        return ApiResponse.success(page);
    }

}
